package uy.edu.ort.negocio;

import javax.ejb.ActivationConfigProperty;
import javax.ejb.EJB;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import org.apache.log4j.Logger;
import uy.edu.ort.dominio.Noticia;

/**
 *
 * @author Leo
 */
@MessageDriven(mappedName = "jms/PublicationQueue", activationConfig = {
    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
})
public class PublicarNoticiaMDB implements MessageListener {

    static Logger logger = Logger.getLogger(PublicarNoticiaMDB.class);

    @EJB
    EncoladorMensajesSBLocal encolador;
    
    public PublicarNoticiaMDB() {
    }

    @Override
    public void onMessage(Message message) {
        if (message != null) {
            // Valido que el mensaje obtenido sea del tipo esperado
            if (message instanceof ObjectMessage) {
                ObjectMessage objectMessage = (ObjectMessage) message;
                try {
                    Noticia noticia = (Noticia)objectMessage.getObject();
                    publicarNoticia(noticia);
                    logger.info("Se publicó la noticia: " + noticia.getTitulo());
                } catch (JMSException ex) {
                    logger.error(ex.getMessage());
                }
            }
        }
    }

    private void publicarNoticia(Noticia noticia) {
        String topico = noticia.getTopico();
        String cola = "jms/" + topico;
        System.out.println("El topico es para: " + cola);
        encolador.encolarMensajeTopic(cola, noticia.toString());
    }
}
